package cn.duhengkui.national.valuelist.core.entity;

import java.util.ArrayList;
import java.util.List;


/**   
 * <table border="1">
 *	<tr><td>包名称：</td><td>cn.duhengkui.national.valuelist.core.entity</td></tr>
 *	<tr><td>类名称：</td><td>PaginatedResult</td></tr>
 *	<tr><td>类描述：</td><td>实体对象</td></tr>
 *	<tr><td>创建人：</td><td>杜恒奎</td></tr>
 *  <tr><td>创建时间：</td><td>2018年6月7日/下午5:05:09</td></tr> 
 *  <tr><td>版本：</td><td>1.0.0</td></tr>
 * </table>   
 *     
 */
public class PaginatedResult<Entity extends BaseObject> implements java.io.Serializable {
	private static final long serialVersionUID = 3832510832895387214L;
	private Integer currPage = new Integer(1);
	private Integer pageSize = new Integer(20);
	private Integer totalSize = new Integer(0);
	private List<Entity> result = new ArrayList<>(0);

	/**
	 * 初始化 <code>PaginatedResult.java</code> 新实例。
	 *
	 */
	public PaginatedResult() {
	}

	/**
	 * 初始化 <code>PaginatedResult.java</code> 新实例。
	 *
	 * @param currPage
	 *            当前页
	 * @param pageSize
	 *            每页记录数
	 */
	public PaginatedResult(Integer currPage, Integer pageSize) {
		if (currPage != null) {
			setCurrPage(currPage);
		}
		if (pageSize != null) {
			setPageSize(pageSize);
		}
	}

	/**
	 * 获取当前页
	 * 
	 * @return Integer
	 */
	public Integer getCurrPage() {
		return currPage;
	}

	/**
	 * 获取上一页
	 * 
	 * @return Integer
	 */
	public Integer getPreviousPage() {
		return currPage == 1 ? 1 : currPage - 1;
	}

	/**
	 * 获取下一页
	 * 
	 * @return Integer
	 */
	public Integer getNextPage() {
		return currPage == getPageCount() ? getPageCount() : currPage + 1;
	}

	/**
	 * 设置当前页，如果小于1，默认为1
	 * 
	 * @param currPage
	 */
	public void setCurrPage(Integer currPage) {
		this.currPage = (currPage == null || currPage < 1 ? 1 : currPage);
	}

	/**
	 * 获取每页记录数
	 * 
	 * @return Integer
	 */
	public Integer getPageSize() {
		return pageSize;
	}

	/**
	 * 设置每页记录数，如果小于1，默认为20
	 * 
	 * @param pageSize
	 */
	public void setPageSize(Integer pageSize) {
		this.pageSize = (pageSize == null || pageSize < 1 ? 20 : pageSize);
	}

	/**
	 * 获取数据库中读取记录开始位置
	 * 
	 * @return Integer
	 */
	public Integer getStartPosition() {
		return (currPage - 1) * pageSize;
	}

	/**
	 * 获取数据库中读取记录结束位置
	 * 
	 * @return Integer
	 */
	public Integer getEndPosition() {
		return currPage * pageSize;
	}

	/**
	 * 获取记录总页数
	 * 
	 * @return Integer
	 */
	public Integer getPageCount() {
		return (totalSize + pageSize - 1) / pageSize;
	}

	/**
	 * 获取总记录条数
	 * 
	 * @return Integer
	 */
	public Integer getTotalSize() {
		return totalSize;
	}

	/**
	 * 设置总记录条数
	 * 
	 * @param totalSize
	 */
	public void setTotalSize(Integer totalSize) {
		this.totalSize = (totalSize == null || totalSize < 0 ? 0 : totalSize);
	}

	/**
	 * 获取查询后结果集
	 * 
	 * @return 实体对象集合
	 */
	public List<Entity> getResult() {
		return result;
	}

	/**
	 * 设置结果集
	 * 
	 * @param result
	 *            实体对象集合
	 */
	public void setResult(List<Entity> result) {
		this.result = result;
	}

	/**
	 * 向现有结果集中增加数据集合
	 * 
	 * @param result
	 *            实体对象集合
	 */
	public void addAllResult(List<Entity> result) {
		this.result.addAll(result);
	}

	/**
	 * 向现有结果集中增加一条数据
	 * 
	 * @param entity
	 *            实体对象
	 */
	public void addResult(Entity entity) {
		result.add(entity);
	}


}